/*******************************************************
  > Copyright (C) 2024 ==IOT== All rights reserved.
  > File Name: 1.c
  > Author: wyf
  > Website:www.lv1.org
  > Created Time: 2024年08月06日 星期二 17时29分19秒
 ***************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <assert.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <signal.h>

//声明：
void fun(int sig);
void fun2(int sig);
void fun3(int sig);


int flag = 0;
int temp = 0;

int main(int argc, const char* argv[])
{
	pid_t pid = 0;
	signal(SIGUSR1, fun);//接收子进程给的信号,必须先注册这个信号出来在第一步才能使用信号量！！！
	int i = 1;
	pid = fork();
	//子
	if(pid == 0){
		temp = getpid();
		printf("这是子进程：%d\n",getpid());
		kill(getppid(),SIGUSR1);//kill必须先是对方的pid号
		signal(SIGUSR2,fun2);
		while(flag == 0)
		{	
			printf("子循环第%d次\n",i++);
			sleep(1);
		}
		exit(0);
	}
	//父
	printf("这是父进程:%d\n",getpid());
	
	alarm(10);
	signal(SIGALRM,fun3);
	
	wait(NULL);
	return 0;
}


void fun(int sig){
	printf("传出来的子进程pid是：%d\n",sig);
}
void fun2(int sig){
	flag = 1;
}
void fun3(int sig){	
		kill(temp,SIGUSR2);	
}




